package cn.org.xiaoweiba.graduationdesign.bookmall.utils;

import java.io.*;
import java.util.Objects;

/**
 * 和文件相关的工具类
 */
public class FileUtil {

    private FileUtil() {}

    /**
     * 获取当前项目的根路径
     * 代码参考：https://blog.csdn.net/zhyp29/article/details/123098048
     *
     * @return 当前项目的根路径
     */
    public static String getProjectRootPath() throws IOException {
        // 得到当前项目的根目录对象
        File dir = new File("");
        // 返回当前项目根目录的绝对路径
        return dir.getCanonicalPath();
    }

    /**
     * 获取当前项目的类根路径
     * 代码参考：https://blog.csdn.net/zhyp29/article/details/123098048
     *
     * @return 当前项目的类根路径
     */
    public static String getClassRootPath() throws IOException {
        // 获取当前项目类加载根目录对象
        File dir = new File(Objects.requireNonNull(FileUtil.class.getResource("/")).getPath());
        // 返回当前项目类加载根目录的绝对路径
        return dir.getCanonicalPath();
    }

    /**
     * 获取类路径下指定文件的绝对路径
     *
     * @param url 类路径下指定文件的访问路径
     * @return 类路径下指定文件的绝对路径
     */
    public static String getClassPathFileAbsolute(String url) throws IOException {
        return getClassRootPath() + url;
    }

    /**
     * 以字符形式读取文件内容
     *
     * @param filePath 文件路径
     * @return 文件的内容(字符串)
     */
    public static String readFileContentByChar(String filePath) throws Exception {
        // 得到文件对象
        File file = new File(filePath);
        // 存储文件的完成内容
        StringBuilder fileContent = new StringBuilder();
        // try 资源自动管理，实现资源的自动关闭
        try (
                // 文件输入流
                FileInputStream fileInputStream = new FileInputStream(file);
                InputStreamReader reader = new InputStreamReader(fileInputStream);
                BufferedReader bufferedReader = new BufferedReader(reader)
        ) {
            // 读取文件内容的缓存
            String buf = "";
            // 读取文件内容
            while ((buf = bufferedReader.readLine()) != null) {
                // 保存读取的文件内容
                fileContent.append(buf);
            }
        } catch (FileNotFoundException e) {
            throw new RuntimeException(e);
        }
        return fileContent.toString();
    }

}
